import numpy as np
import pandas as pd
from collections import Counter
import math

class SimpleSocialMediaAnalysis:
    def __init__(self):
        self.df = None
        self.analysis_results = {}
    
    def generate_sample_data(self, n_samples=1000):
        """生成包含心理学特征的模拟数据集"""
        np.random.seed(42)
        
        data = {
            '年龄': np.random.randint(12, 25, n_samples),  # 扩展年龄范围以涵盖埃里克森发展阶段
            '性别': np.random.choice(['男', '女'], n_samples),
            # 统一年龄数据源
        ages = np.random.randint(12, 25, n_samples)
        '年龄': ages,
        '心理社会发展阶段': [erikson_stage(age) for age in ages],
            '使用时长_小时': np.round(np.random.uniform(1, 10, n_samples), 1),
            '主要平台': np.random.choice(['Instagram', 'TikTok', 'Facebook', 'Snapchat', 'Twitter'], n_samples),
            '心理健康评分': np.random.randint(3, 9, n_samples),
            '社交冲突次数': np.random.randint(0, 6, n_samples),
            '社会比较指数': np.nan,
            '自我认同评分': np.nan
        }
        
        self.df = pd.DataFrame(data)
        self.df = social_comparison_analysis(self.df)
        self.df['自我认同评分'] = np.where(
            (self.df['心理社会发展阶段'] == 'Identity vs Role Confusion') & 
            (self.df['使用时长_小时'] > 5), 3.2, 4.1)
        return self.df
    
    def basic_statistics(self):
        """计算基本统计信息"""
        stats = {
            '总样本数': len(self.df),
            '平均年龄': round(self.df['年龄'].mean(), 2),
            '平均使用时长': round(self.df['使用时长_小时'].mean(), 2),
            '平均人际关系评分': round(self.df['人际关系评分'].mean(), 2),
            '影响人际关系比例': f"{(self.df['影响人际关系'] == '是').mean():.2%}",
            '性别分布': dict(Counter(self.df['性别'])),
            '平台分布': dict(Counter(self.df['主要平台'])),
            '感情状态分布': dict(Counter(self.df['感情状态']))
        }
        
        self.analysis_results['基本统计'] = stats
        return stats
    
    def correlation_analysis(self):
        """分析相关性"""
        # 计算数值特征之间的相关性
        numeric_df = self.df[['年龄', '使用时长_小时', '人际关系评分']].copy()
        
        # 添加编码后的分类变量
        numeric_df['性别_编码'] = self.df['性别'].map({'男': 0, '女': 1})
        numeric_df['影响_编码'] = self.df['影响人际关系'].map({'是': 1, '否': 0})
        
        # 计算相关系数
        corr_matrix = numeric_df.corr()
        
        correlations = {
            '使用时长_人际关系': round(corr_matrix.loc['使用时长_小时', '人际关系评分'], 3),
            '年龄_人际关系': round(corr_matrix.loc['年龄', '人际关系评分'], 3),
            '使用时长_影响': round(corr_matrix.loc['使用时长_小时', '影响_编码'], 3),
            '性别_影响': round(corr_matrix.loc['性别_编码', '影响_编码'], 3)
        }
        
        self.analysis_results['相关性分析'] = correlations
        return correlations
    
    def platform_impact_analysis(self):
        """分析不同平台的影响"""
        platform_stats = {}
        
        for platform in self.df['主要平台'].unique():
            platform_data = self.df[self.df['主要平台'] == platform]
            
            stats = {
                '样本数': len(platform_data),
                '平均使用时长': round(platform_data['使用时长_小时'].mean(), 2),
                '平均人际关系评分': round(platform_data['人际关系评分'].mean(), 2),
                '影响比例': f"{(platform_data['影响人际关系'] == '是').mean():.2%}",
                '主要用户性别': platform_data['性别'].mode()[0] if not platform_data.empty else '无数据'
            }
            
            platform_stats[platform] = stats
        
        self.analysis_results['平台分析'] = platform_stats
        return platform_stats
    
    def demographic_analysis(self):
        """人口统计学分析"""
        demographic_stats = {}
        
        # 性别分析
        for gender in self.df['性别'].unique():
            gender_data = self.df[self.df['性别'] == gender]
            demographic_stats[f'性别_{gender}'] = {
                '样本数': len(gender_data),
                '平均使用时长': round(gender_data['使用时长_小时'].mean(), 2),
                '平均评分': round(gender_data['人际关系评分'].mean(), 2),
                '影响比例': f"{(gender_data['影响人际关系'] == '是').mean():.2%}"
            }
        
        # 年级分析
        for grade in self.df['年级'].unique():
            grade_data = self.df[self.df['年级'] == grade]
            demographic_stats[f'年级_{grade}'] = {
                '样本数': len(grade_data),
                '平均年龄': round(grade_data['年龄'].mean(), 2),
                '平均使用时长': round(grade_data['使用时长_小时'].mean(), 2),
                '平均评分': round(grade_data['人际关系评分'].mean(), 2)
            }
        
        self.analysis_results['人口统计'] = demographic_stats
        return demographic_stats
    
    def predictive_insights(self):
        """生成预测性洞察"""
        insights = []
        
        # 基于相关性分析生成洞察
        corr = self.analysis_results['相关性分析']
        
        if corr['使用时长_人际关系'] < -0.1:
            insights.append("长时间使用社交媒体与人际关系质量下降相关")
        
        if corr['年龄_人际关系'] > 0.1:
            insights.append("年龄增长与人际关系质量改善正相关")
        
        # 基于平台分析生成洞察
        platform_stats = self.analysis_results['平台分析']
        for platform, stats in platform_stats.items():
            if float(stats['影响比例'].strip('%')) > 70:
                insights.append(f"{platform}用户更可能报告人际关系受到影响")
        
        self.analysis_results['预测洞察'] = insights
        return insights
    
    def generate_recommendations(self):
        """生成建议措施"""
        recommendations = []
        
        # 基于使用时长
        avg_usage = self.df['使用时长_小时'].mean()
        if avg_usage > 5:
            recommendations.append("建议学生将每日社交媒体使用时间控制在3小时以内")
        
        # 基于平台分析
        platform_stats = self.analysis_results['平台分析']
        worst_platform = max(platform_stats.items(), 
                            key=lambda x: float(x[1]['影响比例'].strip('%')))
        
        recommendations.append(f"减少使用{worst_platform[0]}平台，因其对人际关系的负面影响最大")
        
        # 通用建议
        recommendations.extend([
            "鼓励面对面的真实社交互动",
            "建立健康的社交媒体使用习惯",
            "定期进行数字排毒（digital detox）",
            "参与线下社交活动和团体"
        ])
        
        self.analysis_results['建议措施'] = recommendations
        return recommendations
    
    def run_complete_analysis(self):
        """运行完整分析流程"""
        print("开始社交媒体数据集分析...")
        
        # 1. 生成数据
        self.generate_sample_data()
        print("✓ 数据生成完成")
        
        # 2. 基本统计
        self.basic_statistics()
        print("✓ 基本统计分析完成")
        
        # 3. 相关性分析
        self.correlation_analysis()
        print("✓ 相关性分析完成")
        
        # 4. 平台分析
        self.platform_impact_analysis()
        print("✓ 平台影响分析完成")
        
        # 5. 人口统计
        self.demographic_analysis()
        print("✓ 人口统计学分析完成")
        
        # 6. 预测洞察
        self.predictive_insights()
        print("✓ 预测性洞察生成完成")
        
        # 7. 建议措施
        self.generate_recommendations()
        print("✓ 建议措施生成完成")
        
        return self.analysis_results
    
    def save_report(self, filename='social_media_analysis_report.txt'):
        """保存分析报告"""
        with open(filename, 'w', encoding='utf-8') as f:
            f.write("=" * 60 + "\n")
            f.write("        社交媒体对人际关系影响的分析报告\n")
            f.write("=" * 60 + "\n\n")
            
            # 基本统计
            f.write("1. 数据集基本信息\n")
            f.write("-" * 40 + "\n")
            for key, value in self.analysis_results['基本统计'].items():
                if isinstance(value, dict):
                    f.write(f"{key}:\n")
                    for k, v in value.items():
                        f.write(f"  {k}: {v}\n")
                else:
                    f.write(f"{key}: {value}\n")
            
            # 相关性分析
            f.write("\n2. 相关性分析\n")
            f.write("-" * 40 + "\n")
            for key, value in self.analysis_results['相关性分析'].items():
                f.write(f"{key}: {value}\n")
            
            # 平台分析
            f.write("\n3. 平台影响分析\n")
            f.write("-" * 40 + "\n")
            for platform, stats in self.analysis_results['平台分析'].items():
                f.write(f"{platform}:\n")
                for k, v in stats.items():
                    f.write(f"  {k}: {v}\n")
                f.write("\n")
            
            # 预测洞察
            f.write("\n4. 关键研究发现\n")
            f.write("-" * 40 + "\n")
            for i, insight in enumerate(self.analysis_results['预测洞察'], 1):
                f.write(f"{i}. {insight}\n")
            
            # 建议措施
            f.write("\n5. 建议措施\n")
            f.write("-" * 40 + "\n")
            for i, recommendation in enumerate(self.analysis_results['建议措施'], 1):
                f.write(f"{i}. {recommendation}\n")
            
            f.write("\n" + "=" * 60 + "\n")
            f.write("分析完成时间: " + pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S') + "\n")
            f.write("=" * 60 + "\n")
        
        print(f"✓ 分析报告已保存到: {filename}")

# 主程序
def main():
    analyzer = SimpleSocialMediaAnalysis()
    
    # 运行完整分析
    results = analyzer.run_complete_analysis()
    
    # 保存报告
    analyzer.save_report()
    
    # 显示摘要
    print("\n" + "="*60)
    print("分析摘要:")
    print("-" * 40)
    
    stats = results['基本统计']
    print(f"总样本数: {stats['总样本数']}")
    print(f"平均使用时长: {stats['平均使用时长']} 小时/天")
    print(f"影响人际关系比例: {stats['影响人际关系比例']}")
    
    corr = results['相关性分析']
    print(f"使用时长与人际关系评分相关性: {corr['使用时长_人际关系']}")
    
    print("="*60)

if __name__ == "__main__":
    main()